home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #6 / Amiga Plus CD - 2004 - No. 06.iso / AmiSoft / Util / libs / ExtraLib.lha / Extra / include / rhosigma / extradefs.h < prev    next >
C/C++ Source or Header  |  2004-05-30  |  20KB  |  435 lines

  1. /* ___________________________________________________________________________
  2. ** |*************************************************************************|
  3. ** |*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|
  4. ** |*| Set TAB to 4 for best readable file layout.  |*|  C++ MaxonDev 4.0  |*|
  5. ** |*|______________________________________________|*|____________________|*|
  6. ** |*************************************************************************|
  7. ** |*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|
  8. ** |*|               |*|  $Id: extradefs.h (30.05.04)                      |*|
  9. ** |*| ###### ###### |*|  RhoSigma Source based on NDK 3.1 Includes 40.15  |*|
  10. ** |*| ##  ## ##   # |*| _________________________________________________ |*|
  11. ** |*| ##  ##  ##    |*|                                                   |*|
  12. ** |*| ######   ##   |*|  The public C/C++ definitions for extra.library   |*|
  13. ** |*| ##      ##    |*|                                                   |*|
  14. ** |*| ##     ##   # |*| ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ |*|
  15. ** |*| ##     ###### |*|  Copyright © 1998-2004 RhoSigma, Roland Heyder    |*|
  16. ** |*|               |*|  All Rights Reserved.                             |*|
  17. ** |*|_______________|*|___________________________________________________|*|
  18. ** |*************************************************************************|
  19. ** ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
  20. */
  21.  
  22. #ifndef RHOSIGMA_EXTRADEFS_H
  23. #define RHOSIGMA_EXTRADEFS_H
  24.  
  25. #ifndef  EXEC_TYPES_H
  26. #include <exec/types.h>
  27. #endif
  28. #ifndef  EXEC_LIBRARIES_H
  29. #include <exec/libraries.h>
  30. #endif
  31. #ifndef  EXEC_ALERTS_H
  32. #include <exec/alerts.h>
  33. #endif
  34.  
  35. /* -------- benötigte typedef's ------------------------------------------ */
  36.  
  37. #ifndef XTRA_VLONG_TYPEDEF
  38. #define XTRA_VLONG_TYPEDEF
  39. typedef long long VLONG;    /* 64-Bit Integer (V)ery(LONG) */
  40. #endif
  41.  
  42. #ifndef XTRA_FFP_TYPEDEF
  43. #define XTRA_FFP_TYPEDEF
  44. typedef float FFP;            /* Motorola's (F)ast(F)loating(P)oint-Format */
  45. #endif
  46.  
  47. /* -------- die BufInfoBlock-Struktur von »BufInfo()« -------------------- */
  48.  
  49. struct BIBStruct {
  50.     APTR    bib_OwnerID;     /* Task (TCB), der diesen Puffer öffnete        */
  51.     ULONG    bib_MaxSize;     /* momentane Größe des Datenbereichs in Byte    */
  52.     ULONG    bib_FreeSize;     /* davon momentan noch unbenutzt                */
  53.     APTR    bib_DataStart;     /* Adresse des gegenwärtigen Datenbereichs        */
  54.     ULONG    bib_CurPos;         /* aktuelle Cursorposition (Zählbeginn=0 !!)    */
  55.     ULONG    bib_EndPos;         /* aktuelle Anfügeposition                        */
  56.     APTR    bib_LastFind;     /* Zeiger auf zuletzt gesuchte Daten od. 0-PTR    */
  57.     ULONG    bib_FindSize;     /* die Länge obiger Such-Daten oder null        */
  58.     ULONG    bib_KeyNum;         /* der Schlüssel der o.g. Such-Daten oder -1    */
  59. /* ---------------------------- neu ab v2.062                                */
  60.     ULONG    bib_DataMemType; /* Speicherflags (MEMF_...) des Datenbereichs  */
  61. };
  62.  
  63. /* -------- Modes für »SeekBuf()« ---------------------------------------- */
  64.  
  65. #define SKM_Current     0    /* Positionierung relativ zur gegenwärtigen CurPos */
  66. #define SKM_Start     1    /* Positionierung relativ zum Pufferanfang         */
  67. #define SKM_End         2    /* Positionierung relativ zum Pufferende           */
  68. #define SKM_Bookmark 3    /* »Position« = Nummer der gewünschten Bookmark    */
  69.  
  70. /* -------- die Parameter-Struktur für »UnpackByteRun1()« ---------------- */
  71.  
  72. struct UnpackParam {
  73.     APTR    up_InBuf;    /* Zeiger auf die gepackten Daten            */
  74.     LONG    up_InLen;    /* die Größe des gepackten Bereichs in Byte  */
  75.     LONG    up_Private;    /* beim ersten Aufruf unbedingt auf 0 setzen */
  76. };
  77.  
  78. /* -------- Styles, Masken u. Flags für »SpecTextPrefs()« ---------------- */
  79.  
  80. /** Styles **/
  81. #define STS_Plain      0    /* normaler Text        \                              */
  82. #define STS_Underline 1    /* unterstrichener Text |  können durch Addition oder  */
  83. #define STS_Bold      2    /* fettgedruckter Text    |  log. ODER kombiniert werden */
  84. #define STS_Italic      4    /* kursiver Text        /                              */
  85.  
  86. /** Masken **/
  87. #define STM_Normal    0x00    /* keine Umrandung, d.h. normale Textausgabe  */
  88. #define STM_Outline    0xff    /* volle Umrandung                            */
  89. #define STM_Shadow    0x1c    /* Schatten unten/rechts sichtbar             */
  90. #define STM_Ghost    0xc1    /* dies wirkt am besten, wenn Sie als »MPen«  */
  91.                             /* die selbe Farbe verwenden, wie der Hinter- */
  92.                             /* grund hat                                  */
  93.  
  94. /** Flags **/
  95. #define STB_FJAM2 0   /* Normalerweise benutzt »SpecText()« den DrawMode JAM1, */
  96. #define STF_FJAM2 1   /* mit diesem Flag wird jedoch JAM2 erzwungen.           */
  97.  
  98. #define STB_AP2MP 1   /* immer der gerade eingestellte »APen« des RastPorts */
  99. #define STF_AP2MP 2   /* soll als »MainPen« (MPen) verwendet werden         */
  100.  
  101. #define STB_BP2TL 2   /* immer der gerade eingestellte »BPen« des RastPorts */
  102. #define STF_BP2TL 4   /* soll als »TopLeftPen« (TLPen) verwendet werden     */
  103.  
  104. #define STB_OP2BR 3   /* immer der gerade eingestellte »OPen« des RastPorts */
  105. #define STF_OP2BR 8   /* soll als »BottomRightPen« (BRPen) verwendet werden */
  106.  
  107. #define STB_PSWAP 4   /* vertauscht »TLPen« u. »BRPen«, d.h. »TLPen« wird für */
  108. #define STF_PSWAP 16  /* un./re. und »BRPen« für ob./li. verwendet            */
  109.  
  110. /*
  111. ** Die folgenden Flags haben keinen Einfluß auf die Arbeitsweise der Funk-
  112. ** tion »SpecText()«. Sie dienen nur dazu, »SpecTextPrefs()« mitzuteilen,
  113. ** welche Parameter neu eingestellt werden sollen. Damit soll überflüssiges
  114. ** Register-retten verhindert werden, da Sie nicht jedem Register, welches
  115. ** von »SpecTextPrefs()« erwartet wird, zwangsläufig einen sinnvollen Wert
  116. ** zuweisen müssen. Wenn Sie z.B. mit D0-D5 irgendwelche Berechnungen machen,
  117. ** oder sie als Schleifenzähler benutzen, und wollen dann den »MPen« ver-
  118. ** ändern, dann brauchen Sie nur D0 mit diesem zu initialisieren und D5 das
  119. ** entsprechende Flag (STF_CMPEN) zuweisen, während Sie sich um D1-D4 nicht
  120. ** sorgen müssen, da diese bei jenem Aufruf vollkommen unberührt und unver-
  121. ** ändert bleiben, d.h. sie müssen weder gerettet noch initialisiert werden.
  122. **
  123. ** ACHTUNG: Wenn keines der folgenden Flags angegeben wird, dann heißt das
  124. ** ¯¯¯¯¯¯¯¯ nicht, daß KEIN Wert geändert werden soll, sondern daß ALLE Werte
  125. **          zu ändern sind !! (In diesem Falle müssen dann logischer Weise
  126. **                              auch alle Register initialisiert werden.)
  127. */
  128.  
  129. #define STB_CMPEN 10    /* Nur den »MPen« auf den angegebenen Wert ändern. */
  130. #define STF_CMPEN 1024
  131.  
  132. #define STB_TLPEN 11    /* Nur den »TLPen« auf den angegebenen Wert ändern. */
  133. #define STF_TLPEN 2048
  134.  
  135. #define STB_BRPEN 12    /* Nur den »BRPen« auf den angegebenen Wert ändern. */
  136. #define STF_BRPEN 4096
  137.  
  138. #define STB_STYLE 13    /* Nur den SoftStyle auf den angegebenen Wert ändern. */
  139. #define STF_STYLE 8162
  140.  
  141. #define STB_CMASK 14    /* Nur die Maske auf den angegebenen Wert ändern. */
  142. #define STF_CMASK 16384
  143.  
  144. #define STB_FLAGS 15    /* Nur die Flags auf den angegebenen Wert ändern. */
  145. #define STF_FLAGS 32768
  146.  
  147. /*
  148. ** Es können auch alle Kombinationen der obigen Flags angegeben werden. Die
  149. ** Funktion »SpecTextPrefs()« wird dann alles das, was Sie wünschen, ändern.
  150. */
  151.  
  152. /* -------- Fehlernummern von »LastError()« ------------------------------ */
  153.  
  154. #define NoError 0          /* bis jetzt ist kein Fehler aufgetreten */
  155.  
  156. /** DBS-Funktionen **/
  157. #define BufInvalid    10  /* die angegebene Adresse war kein BufHandle */
  158. #define NotOwner      11  /* nur der Task, der den Puffer öffnete, darf ihn auch wieder schließen */
  159. #define NoBufMemory   12  /* nicht mehr genügend Speicher frei (MEMF_... s.a. bib_DataMemType) */
  160. #define NoDOSProcess  13  /* die aufrufende Anwendung war kein DOS-Prozess */
  161. #define IoErrRequired 14  /* ein DOS-Error ist aufgetreten (»IoErr()« der dos.library aufrufen) */
  162. #define SeekBadMode   15  /* der angegebene »SeekMode« ist unbekannt */
  163. #define SeekOffsetErr 16  /* gewünschte »Position« unter-/überschreitet den Pufferanfang bzw. das Pufferende */
  164. #define NoFindMem     17  /* kein Speicher für Zwischenspeicherung der zu suchenden Daten (MEMF_PUBLIC) */
  165. #define FindTooLong   18  /* von CurPos bis EndPos bzw. Pufferanfang sind nur noch weniger Daten, als gesucht werden sollen */
  166. #define NoFindAvail   19  /* für »FindNext()/FindPrev()« ist mindestens ein »FindData()« erforderlich (gilt für jeden möglichen Schlüssel) */
  167. #define InvalidKey    20  /* ein angegebener Schlüssel liegt außerhalb des gültigen Bereichs (bei Find-Funktionen max. 8 (0-7) / bei Bookmarks max. 16 (0-15)) */
  168. #define MarkNotSet    21  /* die angegebene Bookmark ist noch nicht gesetzt */
  169. #define MarkCleared   22  /* die Daten an der angegebenen Bookmark wurden durch »Clear()« gelöscht */
  170.  
  171. /** StringToLong() **/
  172. #define ResultValid 30  /* alles in Ordnung (das Ergebnis ist gültig)        */
  173. #define InvalidChar 31  /* im String wurde ein illegales Zeichen gefunden    */
  174. #define Overflow    32  /* repräsentierte Zahl wäre größer als 32 Bit (LONG) */
  175.  
  176. /** FillMem() **/
  177. #define OddAddress 35  /* ungerade Startadresse bei WORD- oder LONG-Modus */
  178. #define NotFilled  36  /* keine Füllung wegen Abrundung (Bereich zu klein, um wenigstens 1 Wert aufzunehmen) */
  179.  
  180. /** ShowMsg() **/
  181. #define BadHeight    40  /* angegebene Höhe war größer als 200 Videozeilen        */
  182. #define NoStructMem  41  /* kein Speicher für benötigte Gfx-Strukturen (MEMF_ANY) */
  183. #define NoChipMemory 42  /* nicht genügend Speicher für die BitPlanes (MEMF_CHIP) */
  184. #define SpecTextErr  43  /* die Funktion »SpecText()« hat einen Fehler gemeldet   */
  185.  
  186. /* -------- die Basis-Struktur der extra.library ------------------------- */
  187.  
  188. struct XtraBase {
  189.     struct Library xb_LibStuff;        /* standardmäßige Library-Struktur      */
  190.     STRPTR           xb_Copyright;    /* ein einzeiliger Copyrightvermerk(+0) */
  191.     BYTE           xb_Private[54];    /* privater Datenbereich der Library    */
  192. };
  193.  
  194. /* -------- von der extra.library erzeugte Alert's ----------------------- */
  195.  
  196. #define EL_AlertD AT_DeadEnd|AN_Unknown
  197. #define EL_AlertR AT_Recovery|AN_Unknown
  198. /* Typen-Kennungen der extra.library ($B5000000=DeadEnd/$35000000=Recovery) */
  199.  
  200. #define EL_NoDfo EL_AlertD|AG_OpenLib|AO_DiskfontLib
  201. /* konnte diskfont.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen ($B503800B) */
  202.  
  203. #define EL_NoDOS EL_AlertD|AG_OpenLib|AO_DOSLib
  204. /* konnte dos.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen ($B5038007) */
  205.  
  206. #define EL_NoGfx EL_AlertD|AG_OpenLib|AO_GraphicsLib
  207. /* konnte graphics.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen ($B5038002) */
  208.  
  209. #define EL_NoInt EL_AlertD|AG_OpenLib|AO_Intuition
  210. /* konnte intuition.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen ($B5038004) */
  211.  
  212. #define EL_NoMath EL_AlertD|AG_OpenLib|AO_MathLib
  213. /* konnte mathtrans.library       V33+ oder                        */
  214. /* konnte mathieeesingbas.library V33+ oder                        */
  215. /* konnte mathieeedoubbas.library V33+ nicht öffnen ($B5038005) */
  216.  
  217. #define EL_Trespassed EL_AlertD|AG_IOError|AO_Unknown
  218. /* Task hat Library benutzt, ohne sie vorher zu öffnen ($B5068035) */
  219.  
  220. /* -------- mit extra.library verwendbare MACROS & Funktionen ------------ */
  221.  
  222. #define SMTPOS_C -1        /* Text zentrieren   */
  223. #define SMTPOS_L -2        /* Text linksbündig  */
  224. #define SMTPOS_R -3        /* Text rechtsbündig */
  225.  
  226. /*** extra.library / SMCOLOR() ***
  227. *»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  228. * Dieses Macro erstellt einen Farbeintrag für die optional anzugebende Farb-
  229. * tabelle der Funktion »ShowMsg()«.
  230. *-----------------------------------------------------------------------------
  231. * Definiert:    extradefs.h  (Copyright © 1998-2004 RhoSigma, Roland Heyder)
  232. *
  233. * Schablone:    Name/A, Pen/A/N, Red/A/N, Green/A/N, Blue/A/N, EndFlag/N/S
  234. *
  235. * Parameter:    Name    --> ein beliebiger Name als ID für diesen Farbeintrag
  236. *
  237. *                Pen        --> Nr. des zu ändernden Farbstiftes (3-15)
  238. *                                (0-2 sind reserviert u. werden ignoriert)
  239. *
  240. *                Red        --> Rot-Anteil der neuen Farbe (0-15)
  241. *                Green    --> Grün-Anteil der neuen Farbe (0-15)
  242. *                Blue    --> Blau-Anteil der neuen Farbe (0-15)
  243. *
  244. *                EndFlag    --> - TRUE , dann endet hier die Farbtabelle
  245. *                            - FALSE, dann MUSS noch ein weiterer Farbeintrag
  246. *                                     (Macro-Aufruf) folgen.
  247. *
  248. * Bemerkung:    Ein Beispiel für die Benutzung dieses Macros finden Sie in
  249. *                der Datei »demo/ShowMsgDemo.C«.
  250. *
  251. *   ACHTUNG:    Die einzelnen Farbeinträge, die später zu einer Farbtabelle
  252. *   ¯¯¯¯¯¯¯¯    gehören, müssen auf JEDEN FALL direkt nacheinander deklariert
  253. *                werden, während zwischen zwei kompletten Farbtabellen aber
  254. *                durchaus auch andere Deklarationen gemacht werden können.
  255. *«««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««*/
  256.  
  257. typedef struct {
  258.     UBYTE    smc_Pen;
  259.     UBYTE    smc_ColHi;
  260.     UBYTE    smc_ColLo;
  261.     UBYTE    smc_Cont;
  262. } smcolor_t;
  263.  
  264. #define SMCOLOR(Name, Pen, Red, Green, Blue, EndFlag)    \
  265. STATIC smcolor_t Name = {Pen,((Red*256)+(Green*16)+Blue)>>8,((Red*256)+(Green*16)+Blue)&255,!EndFlag};
  266.  
  267. /*** extra.library / SMTEXTP() ***
  268. *»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  269. * Dieses Macro erstellt einen Teilstring des Parameterstrings der ExtraLib-
  270. * Routine »ShowMsg()«. Wahlweise kann der Text automatisch zentriert, oder
  271. * links- bzw. rechtsbündig ausgerichtet werden.
  272. *-----------------------------------------------------------------------------
  273. * Definiert:    extradefs.h  (Copyright © 1998-2004 RhoSigma, Roland Heyder)
  274. *
  275. * Schablone:    Name/A, xPos/A/N, yPos/A/N, MPen/A/N, TLPen/A/N, BRPen/A/N,
  276. *                Style/A/N, Mask/A/N, String/A, EndFlag/N/S
  277. *
  278. * Parameter:    Name    --> ein beliebiger Name als ID für diesen Teilstring
  279. *
  280. *                xPos    --> x-Position des Textes,
  281. *                                oder einer der oben definierten SMTPOS-Werte
  282. *
  283. *                yPos    --> y-Position des Textes,
  284. *                                Ausrichtung erfolgt an der Oberkante des Fonts
  285. *
  286. *                MPen    --> gewünschter MPen        \
  287. *                TLPen    --> gewünschter TLPen        |
  288. *                BRPen    --> gewünschter BRPen        | (s.a. »SpecTextPrefs()«
  289. *                Style    --> gewünschter SoftStyle    |
  290. *                Mask    --> gewünschte  Rand-Maske    /
  291. *
  292. *                String    --> der Text selbst aber ohne ("") Anführungszeichen
  293. *
  294. *                EndFlag    --> - TRUE , dann endet hier der Parameterstring
  295. *                            - FALSE, dann MUSS noch ein weiterer Teilstring
  296. *                                     (Macro-Aufruf) folgen.
  297. *
  298. * Bemerkung:    Leider gestattet der Macro-Aufbau sowie die Initialisierungs-
  299. *                Regeln in C/C++ und dazu noch die Macken einiger Compiler keinen
  300. *                vollständigen Aufbau des Parameterstrings. Aus diesem Grunde ist
  301. *                es in C/C++ erforderlich, die einzelnen Teilstrings vor der Be-
  302. *                nutzung noch mittels der ebenfalls hier beschriebenen Funktion
  303. *                »SMTJOIN()« abschließend vorzubereiten.
  304. *
  305. *                Dieses Macro sollten Sie außerdem nur dann verwenden, wenn Sie
  306. *                für diesen Teilstring neue Einstellungen für Farben etc. machen
  307. *                wollen. Wenn dieser Teilstring jedoch mit den gleichen Ein-
  308. *                stellungen ausgegeben werden soll, wie der vorhergehende bzw.
  309. *                Sie die Default-Einstellungen verwenden wollen, dann müssen
  310. *                Sie stattdessen das Macro »SMTEXT()« verwenden.
  311. *
  312. *                Ein Beispiel für die Benutzung dieses Macros finden Sie in
  313. *                der Datei »demo/ShowMsgDemo.C«.
  314. *
  315. *   ACHTUNG:    Die einzelnen Teilstrings, die später zu einem Parameterstring
  316. *   ¯¯¯¯¯¯¯¯    gehören, müssen auf JEDEN FALL direkt nacheinander deklariert
  317. *                werden, während zwischen zwei kompletten Parameterstrings aber
  318. *                durchaus auch andere Deklarationen gemacht werden können.
  319. *
  320. * Siehe auch:    »SMTEXT()«, »SMTJOIN()«
  321. *«««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««*/
  322.  
  323. #define SMTEXTP(Name, xPos, yPos, MPen, TLPen, BRPen, Style, Mask, String, EndFlag)    \
  324. typedef struct {                                                        \
  325.     WORD    smt_PosX;                                                    \
  326.     UBYTE    smt_PosY;                                                    \
  327.     UBYTE    smt_Pref;                                                    \
  328.     UBYTE    smt_MPen;                                                    \
  329.     UBYTE    smt_TLPen;                                                    \
  330.     UBYTE    smt_BRPen;                                                    \
  331.     UBYTE    smt_Style;                                                    \
  332.     UBYTE    smt_Mask;                                                    \
  333.     TEXT    smt_Text[sizeof(#String)+((5-((sizeof(#String)-1)&3))&3)];    \
  334.     UBYTE    smt_Cont;                                                    \
  335. } smtextp_##Name;                                                        \
  336. STATIC smtextp_##Name Name = {xPos,yPos,TRUE,MPen,TLPen,BRPen,Style,Mask,#String,!EndFlag};
  337.  
  338. /*** extra.library / SMTEXT() ***
  339. *»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  340. * Dieses Macro erstellt einen Teilstring des Parameterstrings der ExtraLib-
  341. * Routine »ShowMsg()«. Wahlweise kann der Text automatisch zentriert, oder
  342. * links- bzw. rechtsbündig ausgerichtet werden.
  343. *-----------------------------------------------------------------------------
  344. * Definiert:    extradefs.h  (Copyright © 1998-2004 RhoSigma, Roland Heyder)
  345. *
  346. * Schablone:    Name/A, xPos/A/N, yPos/A/N, String/A, EndFlag/N/S
  347. *
  348. * Parameter:    Name    --> ein beliebiger Name als ID für diesen Teilstring
  349. *
  350. *                xPos    --> x-Position des Textes,
  351. *                                oder einer der oben definierten SMTPOS-Werte
  352. *
  353. *                yPos    --> y-Position des Textes,
  354. *                                Ausrichtung erfolgt an der Oberkante des Fonts
  355. *
  356. *                String    --> der Text selbst aber ohne ("") Anführungszeichen
  357. *
  358. *                EndFlag    --> - TRUE , dann endet hier der Parameterstring
  359. *                            - FALSE, dann MUSS noch ein weiterer Teilstring
  360. *                                     (Macro-Aufruf) folgen.
  361. *
  362. * Bemerkung:    Leider gestattet der Macro-Aufbau sowie die Initialisierungs-
  363. *                Regeln in C/C++ und dazu noch die Macken einiger Compiler keinen
  364. *                vollständigen Aufbau des Parameterstrings. Aus diesem Grunde ist
  365. *                es in C/C++ erforderlich, die einzelnen Teilstrings vor der Be-
  366. *                nutzung noch mittels der ebenfalls hier beschriebenen Funktion
  367. *                »SMTJOIN()« abschließend vorzubereiten.
  368. *
  369. *                Dieses Macro sollten Sie außerdem nur dann verwenden, wenn Sie
  370. *                für diesen Teilstring die gleichen Einstellungen wie für den
  371. *                vorhergehenden Teilstring verwenden wollen. Wenn dieser Teil-
  372. *                string jedoch neue Einstellungen für Farben etc. erhalten
  373. *                soll, dann müssen Sie stattdessen das Macro »SMTEXTP()« ver-
  374. *                wenden.
  375. *
  376. *                Ein Beispiel für die Benutzung dieses Macros finden Sie in
  377. *                der Datei »demo/ShowMsgDemo.C«.
  378. *
  379. *   ACHTUNG:    Die einzelnen Teilstrings, die später zu einem Parameterstring
  380. *   ¯¯¯¯¯¯¯¯    gehören, müssen auf JEDEN FALL direkt nacheinander deklariert
  381. *                werden, während zwischen zwei kompletten Parameterstrings aber
  382. *                durchaus auch andere Deklarationen gemacht werden können.
  383. *
  384. * Siehe auch:    »SMTEXTP()«, »SMTJOIN()«
  385. *«««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««*/
  386.  
  387. #define SMTEXT(Name, xPos, yPos, String, EndFlag)                        \
  388. typedef struct {                                                        \
  389.     WORD    smt_PosX;                                                    \
  390.     UBYTE    smt_PosY;                                                    \
  391.     UBYTE    smt_Pref;                                                    \
  392.     TEXT    smt_Text[sizeof(#String)+((6-((sizeof(#String)-1)&3))&3)];    \
  393.     UBYTE    smt_Cont;                                                    \
  394. } smtext_##Name;                                                        \
  395. STATIC smtext_##Name Name = {xPos,yPos,FALSE,#String,!EndFlag};
  396.  
  397. /*** extra.library / SMTJOIN() ***
  398. *»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  399. * Diese Funktion dient der abschließenden Vorbereitung der mittels »SMTEXT()«
  400. * und/oder »SMTEXTP()« initialisierten Parameterstrings zur Verwendung mit
  401. * »ShowMsg()«. Idealer Weise sollte man diese Funktion als erste innerhalb von
  402. * »main()« aufrufen.
  403. *  Die Funktion ist Bestandteil der mitgelieferten »rhosigma.lib«, welche Sie
  404. * mit Ihrem Projekt linken sollten.
  405. *-----------------------------------------------------------------------------
  406. * Synopsis:        VOID SMTJOIN (Count, ...)
  407. *
  408. * Eingaben:        Count    -->    (UWORD)    Anzahl der übergebenen Teilstrings
  409. *
  410. *                ...        --> (&ID)    nacheinander die Adressen (Referenzen) der
  411. *                                    einzelnen Teilstrings
  412. *
  413. * Bemerkung:    Mehrfacher Aufruf für jeden einzelnen Teilstring ist möglich,
  414. *                aber durch die variable Argumentenliste eigentlich überflüssig,
  415. *                da man so auch alle Teilstrings auf einmal angeben kann.
  416. *
  417. *                Ein Beispiel für die Benutzung dieser Funktion finden Sie in
  418. *                der Datei »demo/ShowMsgDemo.C«.
  419. *
  420. *   ACHTUNG:    Diese Funktion muß auch dann aufgerufen werden, wenn der Para-
  421. *    ¯¯¯¯¯¯¯¯    meterstring nur aus einem einzigen Teilstring besteht, da das
  422. *                Macro »SMTEXT()« bzw. »SMTEXTP()« keine vollständige Initiali-
  423. *                sierung des gleichen vornehmen kann. Das wird alles erst durch
  424. *                »SMTJOIN()« erledigt !!
  425. *
  426. * Siehe auch:    »SMTEXT()«, »SMTEXTP()«
  427. *«««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««*/
  428.  
  429. #ifndef        RHOSIGMA_H
  430. #include    <rhosigma/rhosigma.h>
  431. #endif
  432.  
  433. #endif    /* RHOSIGMA_EXTRADEFS_H */
  434.  
  435.